import { defineStore } from 'pinia';
import WebSocketClient from '../utils/WebSocket/websct';

/**
 * WebSocket状态管理Store
 * 用于全局管理WebSocket连接状态和消息处理
 */
export const useWebSocketStore = defineStore('websocket', {
  state: () => ({
    /** WebSocket客户端实例 */
    client: null,
    /** 连接状态 */
    isConnected: false,
    /** 消息历史记录 */
    messages: [],
    /** 连接错误信息 */
    error: null
  }),
  actions: {
    /**
     * 初始化WebSocket连接
     * @param {Function} customHandler - 自定义消息处理函数
     */
    initWebSocket(customHandler = null) {
      // 如果已有连接，先关闭
      if (this.client) {
        this.closeWebSocket();
      }

      // 创建WebSocket客户端实例
      this.client = new WebSocketClient((data) => {
        // 存储消息到历史记录
        this.messages.push({ timestamp: new Date(), data });
        // 调用自定义处理函数
        if (typeof customHandler === 'function') {
          customHandler(data);
        }
      });

      // 先建立连接，创建socket实例
      this.client.connect();

      // 添加null检查，确保socket已创建
      if (!this.client.socket) {
        console.error('WebSocket初始化失败，socket为null');
        this.error = 'WebSocket连接初始化失败';
        return;
      }


      // 重写连接状态回调
      const originalOnOpen = this.client.socket.onopen;
      this.client.socket.onopen = () => {
        originalOnOpen();
        this.isConnected = true;
        this.error = null;
      };

      const originalOnClose = this.client.socket.onclose;
      this.client.socket.onclose = () => {
        originalOnClose();
        this.isConnected = false;
      };

      const originalOnError = this.client.socket.onerror;
      this.client.socket.onerror = (error) => {
        originalOnError(error);
        this.error = error.message;
      };

    },

    /**
     * 发送消息
     * @param {string} message - 要发送的消息内容
     * @returns {boolean} - 发送成功返回true，否则返回false
     */
    sendMessage(message) {
      if (this.client && this.isConnected) {
        this.client.send(message);
        return true;
      }
      console.error('WebSocket连接未就绪，无法发送消息');
      return false;
    },

    /**
     * 关闭WebSocket连接
     */
    closeWebSocket() {
      if (this.client) {
        this.client.close();
        this.client = null;
        this.isConnected = false;
      }
    },

    /**
     * 清除消息历史
     */
    clearMessages() {
      this.messages = [];
    }
  },
  getters: {
    /**
     * 获取最后一条消息
     * @returns {Object|null} - 最后一条消息或null
     */
    lastMessage(state) {
      return state.messages.length > 0 ? state.messages[state.messages.length - 1] : null;
    }
  }
});